package com.simon.cdc.sql;


import cn.hutool.json.JSONObject;

import java.util.StringJoiner;

/**
 * WHERE条件子句生成器
 */
final class WhereClause {
    private final JSONObject conditions;

    WhereClause(JSONObject conditions) {
        this.conditions = conditions;
    }

    /**
     * 构建SQL查询条件字符串
     * <p>
     * 本方法通过遍历conditions集合，将每个键值对格式化为SQL查询条件
     * 键和值之间使用等号连接，不同的条件之间使用"AND"逻辑符连接
     * 为了确保SQL语法的正确性，值会经过SQLValueFormatter的format方法进行格式化
     *
     * @return 返回一个字符串，包含了所有条件，用于构建SQL查询语句
     */
    String build() {
        // 创建StringJoiner对象，用于合并SQL查询条件，条件之间使用"AND"逻辑符连接
        StringJoiner clauses = new StringJoiner(" AND ");

        // 遍历conditions集合，将每个键值对转换为SQL查询条件
        conditions.forEach((key, value) ->
                // 将键和值格式化为SQL查询条件，值需要通过SQLValueFormatter进行格式化以确保SQL语法的正确性
                clauses.add(key + "=" + SQLValueFormatter.format(value))
        );

        // 返回合并后的SQL查询条件字符串
        return clauses.toString();
    }
}